package org.kgduyjj.toolbox.enumtype;

import org.kgduyjj.toolbox.exception.EnumTypeException;

/**
 * 身份证件类型 枚举
 * 
 * @author Kgduyjj
 * @since 2020-07-26
 * @version Alpha-1.42
 *
 */
public enum IdCardType {
	/** 错误的证件类型 */
	ERR_CARD(0, "Not_id_card", null),
	/** 中国大陆身份证件 */
	CN_CARD(1, "China_id_card", "^[1-9]{1}[0-9]{15}[1|2]{1}[0-9|x|X]{1}$"),
	/** 中国台湾身份证件 */
	TW_CARD(2, "Taiwan_id_card", "^[a-zA-Z][0-9]{9}$"),
	/** 中国香港身份证件 */
	HK_CARD(3, "HongKong_id_card", "^[A-Z]{1,2}[0-9]{6}\\(?[0-9A]\\)?$"),
	/** 中国澳门身份证件 */
	MC_CARD(3, "Macao_id_card", "^[1|5|7][0-9]{6}\\(?[0-9A-Z]\\)?$");

	/** 证件代码 */
	private Integer code;
	/** 证件描述 */
	private String desc;
	/** 基本的证件格式 */
	private String simplePattern;

	private IdCardType(Integer code, String desc, String simplePattern) {
		this.code = code;
		this.desc = desc;
		this.simplePattern = simplePattern;
	}

	public Integer getCode() {
		return code;
	}

	public String getDesc() {
		return desc;
	}

	public String getSimplePattern() {
		return simplePattern;
	}

	/**
	 * 根据code检查枚举对象
	 * 
	 * @param code
	 * @return
	 */
	public static IdCardType verificationCode(Integer code) {
		if (null == code) {
			throw new EnumTypeException(IdCardType.class.getSimpleName() + ":[ 枚举值传入为空 ]");
		}
		for (IdCardType item : IdCardType.values()) {
			if (code == item.getCode()) {
				return item;
			}
		}
		throw new EnumTypeException(IdCardType.class.getSimpleName() + ":[ 枚举对象不存在 ]");
	}

	/**
	 * 转换为指定枚举值，若枚举值不存在则返回空，主要应用于处理页面数据和DTO赋值
	 * 
	 * @param code
	 * @return
	 */
	public static IdCardType tranfer(Integer code) {
		if (null == code) {
			return null;
		}
		for (IdCardType item : IdCardType.values()) {
			if (item.getCode().equals(code)) {
				return item;
			}
		}
		return null;
	}

	/**
	 * 根据code获取对应描述
	 * 
	 * @return
	 */
	public static String getDescByCode(Integer code) {
		IdCardType E = tranfer(code);
		return E == null ? null : E.getDesc();
	}
}
